package com.future.enable;

import com.future.anno.EnableDoAsync;
import com.future.interceptor.AsyncAopAdvice;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.type.AnnotationMetadata;

/**
 * 当我们需要导入某个类到spring容器中去，但spring恰好无法扫描到这个类，而我们又无法修改这个类
 * 我们就可以通过@import(xxx.class)是将这个类导入到spring容器中。
 * 作用：判断注解是否开启  开启之后把相关配置类注入到spring bean中 (切点信息(添加了注解的方法)，拦截器信息(实现aop的地方))
 */
public class AsyncImportSelector implements ImportSelector {

    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        AnnotationAttributes attributes = AnnotationAttributes.fromMap(
                annotationMetadata.getAnnotationAttributes(EnableDoAsync.class.getName(), false));
        boolean value = attributes.getBoolean("value");
        if (value) {
            //导入配置类进spring容器中
            return new String[]{AsyncConfig.class.getName(), AsyncAopAdvice.class.getName(), AsyncPointcut.class.getName()};
        }
        return new String[0];

    }
}
